home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / encodings / idna.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  4KB  |  177 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import stringprep
  5. import unicodedata
  6. import re
  7. import codecs
  8. dots = re.compile(u'[.\xe3\x80\x82\xef\xbc\x8e\xef\xbd\xa1]')
  9. ace_prefix = 'xn--'
  10. uace_prefix = unicode(ace_prefix, 'ascii')
  11.  
  12. def nameprep(label):
  13.     newlabel = []
  14.     for c in label:
  15.         if stringprep.in_table_b1(c):
  16.             continue
  17.         
  18.         newlabel.append(stringprep.map_table_b2(c))
  19.     
  20.     label = u''.join(newlabel)
  21.     label = unicodedata.normalize('NFKC', label)
  22.     for c in label:
  23.         if stringprep.in_table_c12(c) and stringprep.in_table_c22(c) and stringprep.in_table_c3(c) and stringprep.in_table_c4(c) and stringprep.in_table_c5(c) and stringprep.in_table_c6(c) and stringprep.in_table_c7(c) and stringprep.in_table_c8(c) or stringprep.in_table_c9(c):
  24.             raise UnicodeError, 'Invalid character %s' % repr(c)
  25.             continue
  26.     
  27.     RandAL = map(stringprep.in_table_d1, label)
  28.     for c in RandAL:
  29.         if c:
  30.             if filter(stringprep.in_table_d2, label):
  31.                 raise UnicodeError, 'Violation of BIDI requirement 2'
  32.             
  33.             if not RandAL[0] or not RandAL[-1]:
  34.                 raise UnicodeError, 'Violation of BIDI requirement 3'
  35.             
  36.         not RandAL[-1]
  37.     
  38.     return label
  39.  
  40.  
  41. def ToASCII(label):
  42.     
  43.     try:
  44.         label = label.encode('ascii')
  45.     except UnicodeError:
  46.         pass
  47.  
  48.     if len(label) < len(label):
  49.         pass
  50.     elif len(label) < 64:
  51.         return label
  52.     
  53.     raise UnicodeError, 'label too long'
  54.     label = nameprep(label)
  55.     
  56.     try:
  57.         label = label.encode('ascii')
  58.     except UnicodeError:
  59.         0
  60.         0
  61.     except:
  62.         0
  63.  
  64.     if len(label) < len(label):
  65.         pass
  66.     elif len(label) < 64:
  67.         return label
  68.     
  69.     raise UnicodeError, 'label too long'
  70.     if label.startswith(uace_prefix):
  71.         raise UnicodeError, 'Label starts with ACE prefix'
  72.     
  73.     label = label.encode('punycode')
  74.     label = ace_prefix + label
  75.     if len(label) < len(label):
  76.         pass
  77.     elif len(label) < 64:
  78.         return label
  79.     
  80.     raise UnicodeError, 'label too long'
  81.  
  82.  
  83. def ToUnicode(label):
  84.     if isinstance(label, str):
  85.         pure_ascii = True
  86.     else:
  87.         
  88.         try:
  89.             label = label.encode('ascii')
  90.             pure_ascii = True
  91.         except UnicodeError:
  92.             pure_ascii = False
  93.  
  94.     if not pure_ascii:
  95.         label = nameprep(label)
  96.         
  97.         try:
  98.             label = label.encode('ascii')
  99.         except UnicodeError:
  100.             raise UnicodeError, 'Invalid character in IDN label'
  101.         except:
  102.             None<EXCEPTION MATCH>UnicodeError
  103.         
  104.  
  105.     None<EXCEPTION MATCH>UnicodeError
  106.     if not label.startswith(ace_prefix):
  107.         return unicode(label, 'ascii')
  108.     
  109.     label1 = label[len(ace_prefix):]
  110.     result = label1.decode('punycode')
  111.     label2 = ToASCII(result)
  112.     if label.lower() != label2:
  113.         raise UnicodeError, ('IDNA does not round-trip', label, label2)
  114.     
  115.     return result
  116.  
  117.  
  118. class Codec(codecs.Codec):
  119.     
  120.     def encode(self, input, errors = 'strict'):
  121.         if errors != 'strict':
  122.             raise UnicodeError, 'unsupported error handling ' + errors
  123.         
  124.         if not input:
  125.             return ('', 0)
  126.         
  127.         result = []
  128.         labels = dots.split(input)
  129.         if labels and len(labels[-1]) == 0:
  130.             trailing_dot = '.'
  131.             del labels[-1]
  132.         else:
  133.             trailing_dot = ''
  134.         for label in labels:
  135.             result.append(ToASCII(label))
  136.         
  137.         return ('.'.join(result) + trailing_dot, len(input))
  138.  
  139.     
  140.     def decode(self, input, errors = 'strict'):
  141.         if errors != 'strict':
  142.             raise UnicodeError, 'Unsupported error handling ' + errors
  143.         
  144.         if not input:
  145.             return (u'', 0)
  146.         
  147.         if isinstance(input, unicode):
  148.             labels = dots.split(input)
  149.         else:
  150.             input = str(input)
  151.             unicode(input, 'ascii')
  152.             labels = input.split('.')
  153.         if labels and len(labels[-1]) == 0:
  154.             trailing_dot = u'.'
  155.             del labels[-1]
  156.         else:
  157.             trailing_dot = u''
  158.         result = []
  159.         for label in labels:
  160.             result.append(ToUnicode(label))
  161.         
  162.         return (u'.'.join(result) + trailing_dot, len(input))
  163.  
  164.  
  165.  
  166. class StreamWriter(Codec, codecs.StreamWriter):
  167.     pass
  168.  
  169.  
  170. class StreamReader(Codec, codecs.StreamReader):
  171.     pass
  172.  
  173.  
  174. def getregentry():
  175.     return (Codec().encode, Codec().decode, StreamReader, StreamWriter)
  176.  
  177.